1. Field of the Invention
The present invention relates to memories and memory controllers, and more specifically to computer systems having multiple memories and a memory controller.
2. Description of Related Art
In most computer systems, microprocessors operate at a much higher speed than the related memory. Ever since the first AT-compatible computers were introduced with 80286 microprocessors, wait states have been added when the microprocessor requests information from memory. More recently, however, various methods such as page mode and static column techniques have increased memory speed substantially. Interleaving of memory, in which total RAM is divided into various baks, storing sequential bits in alternate bans, and using high-speed memory cache have also increased memory access speed.
Dynamic random access memory (DRAM) is typically organized in rows and columns, which can also help increase memory speed when the row length is such that repeated accesses are more often on the same row than between different rows. Typical DRAM configurations include 256.times.8, 1M.times.32, 2M.times.32, 4M.times.32, 1M.times.36, 2M.times.36, 4M.times.36, 8M.times.36, 1M.times.40, 1M.times.16, 256K.times.16, 512K.times.8, etc. Other options, such as whether the memory is a SIMM or DIMM, whether fist page mode is available, and what the various access times are, are all subject to selection by the board configuration engineer. By determining the number of rows and columns of organization, by the byte density, by pin count, by packaging type, access time, operating current, and the number of chips in the package, and other considerations, a board configuration engineer can select an appropriate DRAM structure for a particular system's needs.
Given the large number of options, new systems often render previous systems obsolete. Depending on the cost of the consequent upgrade requirements, an end user, customer, or consumer must decide whether to completely replace an existing system, whether to struggle along as long as possible with the existing system, or whether to attempt a partial upgrade, in which some components may be replaced with newer components. The latter alternative, which may be considered a temporary stopgap measure postponing the inevitable cost of an upgrade, however, is not typically possible. The end user is often forced either to replace the system entirely, or to struggle along with an existing system. Given the rapid development of computer systems, the consumer is therefore often left with an expensive, inevitable, and frequently recurring upgrade need.
While this can be expensive for consumers, the cost can be devastating to small, medium, and large businesses, which often have a local network of desktop computers with one or more servers. The servers can often have tens of thousands of dollars worth of memory components. Replacing all the memory in a server, therefore, can be an enormous expense. Because development in memory speeds is often revolutionary rather than evolutionary, a small business is frequently faced with the dilemma of whether to completely upgrade the system, including the server connected to the local network, or whether to struggle along with the present system.
Unfortunately, the small business has typically not been able to upgrade in small steps, since products are often configured with only a single memory type. Given the large memory requirements of most servers and other large computer systems, even a small difference in memory price between memory components, when multiplied by the large memory needs of a typical computer system, can translate into an enormous investment. Because a memory controller, regardless of whether the memory controller contains a cache, can typically only communicate with a single type of memory, the owner of the large computer system has typically been required to select a single memory speed, configuration, and other constraints.
Moreover, most computers have used a single memory module size throughout the memory array, to facilitate interleaving. Memory modules are typically slower than the processors to which they are coupled. For this reason, many computer systems require wait states during a memory access. Although the use of wait states slows a computer down, the processor always has the correct value of data. To reduce the need for wait states, interleaving of memory has often been used. Interleaving is a method of writing adjacent memory locations to different memory banks. For example, one bank may hold the odd memory locations and another bank may hold the even memory locations. When sequential memory locations are addressed, one bank can provide data access while the other is free to complete its precharge from the previous access to minimize the memory latency. However, to be fully effective, the banks should be of equal size. Using different memory bank sizes is problematic when high numbers of memory locations are addressed.